有多個文件或圖檔利用checkbox勾選後,可以直接點選下載按鈕。此時網站會將剛剛所選擇的項目打包成一包zip下載到你的電腦中。
npm install jszip
npm install file-saver
選擇需要的圖檔後,按下載,打包圖檔至zip並產出文件告知被選去的圖檔id
code demo 連結
這邊就不一一放code,我們來看看最核心的部分
//選擇圖檔,點擊下載按鈕後
download() {
      const _self = this;
      this.selectedList = []; 
      
      // 取得被選取的列表
      this.selectedList = this.data.filter(item => item.isCheck);
      // create zip 
      const zip = new JSZip();
      // - create folder
      let note = zip.folder("note");
      let selectedIdNum = '';
      _self.selectedList.map(item => selectedIdNum += item.id + ',');
      
      // - 建立文件,並給予動態的content
      let txt = _self.selectedList.length > 0 ? `被選擇的圖檔id:${selectedIdNum}`: '沒有被選擇的圖檔'
      note.file("note.txt", txt);
      
      
      //將選取的圖檔,轉為base64後,加到zip中
      _self.selectedList.forEach((item, index) => {
      //呼叫轉換image to base64 的 function
      _self.getBase64Image(`https://fakeimg.pl/${item.img}`,function(dataUrl) {
          let _url = dataUrl.replace('data:image/png;base64,', '')
          //將轉好base64的內容,加入zip黨
          zip.file(`${item.id}.png`, _url,{base64: true});
          
          if(index === _self.selectedList.length-1){
             //將所有檔案打包
             zip.generateAsync({type:"blob"})
               .then(function(content) {
                  //  儲存這個zip到local端
                  saveAs(content, "example.zip");
               });
           }
        }, 'image/png')//end: getBase64Image
      })
    },
jszip真的是蠻方便好用的插件可以做到將檔案打包zip,可能依照需求還有json或其他類型檔案,不過今天就用簡單的範例,跟大家分享,如果要透過網站做到zip檔案的作法囉